import { initReloadSystem } from './appManager'
// 统一token的cookie存储名称
const cookieTokenName = 'ww_ff_cs'
// 本地token存储名称
const sessionTokenName = 'fa_fa_rr'
// 直接存下用户信息 不调获取用户信息接口了
const userCatchName = 'uu_rr'


/**
 * 初始化的时候 用cookie的token初始化用户及权限 如果后面发现token变了（别的页签用别的用户登录了）强制刷新页面
 */
export function initSystemCatch() {
    const userInfo = getCookieUser()
    if (userInfo)saveToken(userInfo.token)
    return userInfo
}

/**
 *
 * @param userInfo
 */
export function saveSystemCatch(userInfo:any) {
    saveCookieUser(userInfo.userName, userInfo.userId, userInfo.token)
    saveToken(userInfo.token)
}

/**
 * 清楚缓存数据
 * @param userInfo
 */
export function clearSystemCatch() {
    clearToken()
    delCookie(userCatchName)
}

/**
 * 获得缓存cookie 正常不用存用户名 接口设计需要用户名 一起存
 */
export function getCookieUser() {
    const userInfo = getCookie(userCatchName)
    if (!userInfo || userInfo.indexOf('|*|*|') === -1) return null
    const arr = userInfo.split('|*|*|')
    if (arr.length !== 3) return null
    return {
        userName: arr[0],
        userId: arr[1],
        token: arr[2]
    }
}

/**
 * 获得缓存cookie
 */
export function saveCookieUser(userName:string, userId:string, token:string) {
    document.cookie = userCatchName + '=' + (userName + '|*|*|' + userId + '|*|*|' + encodeURIComponent(token)) + ';'
}


/**
 * 获取token
 */
export function getToken(): string | null {
    return sessionStorage.getItem(sessionTokenName)
}


/**
 * 验证当前页数据和token是否匹配
 */
export function validTokenChange(jump = true) {
    const token = getCookieToken()
    const pageToken = getToken()
    if (token && pageToken && (token !== pageToken)) {
        return true
    }
    return false
}

/**
 *
 */
export function validToken() {
    const token = getCookieToken()
    if (!token) return false
    const changed = validTokenChange()
    return !changed
}

/**
 * 获取token
 */
export function getCookieToken(): string | null {
    return getCookie(cookieTokenName)
}

/**
 * 开发环境才有保存 本地保存token
 */
export function saveToken(value:string) {
    sessionStorage.setItem(sessionTokenName, value)
    document.cookie = cookieTokenName + '=' + encodeURIComponent(value) + ';'
}

/**
 *
 */
export function clearToken() {
    sessionStorage.clear()
    delCookie(cookieTokenName)
}

/**
 *
 */
export function clearPageCatch() {
    sessionStorage.clear()
}

/**
 *
 * @param name
 */
export function getCookie(name:string) {
    const arr = document.cookie.match(new RegExp('(^| )' + name + '=([^;]*)(;|$)'))
    return arr ? decodeURIComponent(arr[2]) : null
}

/**
 *
 * @param name
 */
export function delCookie(name:string) {
    const exp = new Date()
    exp.setTime(exp.getTime() - 1)
    const cval = getCookie(name)
    if (cval != null) document.cookie = name + '=' + cval + ';expires=' + exp.toGMTString()
}


